package com.yumeng.common.runtime;

import java.util.HashMap;
import java.util.Map;

/**
 * @author wxd
 * @date 2024/5/28 下午3:07
 */
public class SysPropAdapter {

    /**
     * Java运行时环境版本
     * @return
     */
    public static String getJavaVersion(){
        return getSysProperty("java.version");
    }

    /**
     * Java运行时环境供应商
     * @return
     */
    public static String getJavaVendor(){
        return getSysProperty("java.vendor");
    }

    /**
     *  Java供应商的URL
     * @return
     */
    public static String getJavaVendorUrl(){
        return getSysProperty("java.vendor.url");
    }

    /**
     * Java安装目录
     * @return
     */
    public static String getJavaHome(){
        return getSysProperty("java.home");
    }

    /**
     * Java虚拟机规范版本
     * @return
     */
    public static String getJavaVmSpecificationVersion(){
        return getSysProperty("java.vm.specification.version");
    }

    /**
     * Java虚拟机规范供应商
     * @return
     */
    public static String getJavaVmSpecificationVendor(){
        return getSysProperty("java.vm.specification.vendor");
    }

    /**
     * Java虚拟机规范名称
     * @return
     */
    public static String getJavaVmSpecificationName(){
        return getSysProperty("java.vm.specification.name");
    }

    /**
     * Java虚拟机实现版本
     * @return
     */
    public static String getJavaVmVersion(){
        return getSysProperty("java.vm.version");
    }

    /**
     * Java虚拟机实现供应商
     * @return
     */
    public static String getJavaVmVendor(){
        return getSysProperty("java.vm.vendor");
    }

    /**
     * Java虚拟机实现名称
     * @return
     */
    public static String getJavaVmName(){
        return getSysProperty("java.vm.name");
    }

    /**
     * Java运行时环境规范版本
     * @return
     */
    public static String getJavaSpecificationVersion(){
        return getSysProperty("java.specification.version");
    }

    /**
     * Java运行时环境规范供应商
     * @return
     */
    public static String getJavaSpecificationVendor(){
        return getSysProperty("java.specification.vendor");
    }

    /**
     * Java运行时环境规范名称
     * @return
     */
    public static String getJavaSpecificationName(){
        return getSysProperty("java.specification.name");
    }

    /**
     * Java类格式版本号
     * @return
     */
    public static String getJavaClassVersion(){
        return getSysProperty("java.class.version");
    }

    /**
     * Java类路径
     * @return
     */
    public static String getJavaClassPath(){
        return getSysProperty("java.class.path");
    }

    /**
     * 加载库时搜索的路径列表
     * @return
     */
    public static String getJavaLibraryPath(){
        return getSysProperty("java.library.path");
    }

    /**
     * 默认的临时文件路径
     * @return
     */
    public static String getJavaIOTmpdir(){
        return getSysProperty("java.io.tmpdir");
    }

    /**
     * 要使用的 JIT 编译器的名称
     * @return
     */
    public static String getJavaCompiler(){
        return getSysProperty("java.compiler");
    }

    /**
     * 一个或多个扩展目录的路径
     * @return
     */
    public static String getJavaExtDirs(){
        return getSysProperty("java.ext.dirs");
    }

    /**
     * 操作系统的名称
     * @return
     */
    public static String getOsName(){
        return getSysProperty("os.name");
    }

    /**
     * 操作系统的架构
     * @return
     */
    public static String getOsArch(){
        return getSysProperty("os.arch");
    }

    /**
     * 操作系统的版本
     * @return
     */
    public static String getOsVersion(){
        return getSysProperty("os.version");
    }

    /**
     * 文件分隔符（在 UNIX 系统中是“/”）
     * @return
     */
    public static String getFileSeparator(){
        return getSysProperty("file.separator");
    }

    /**
     * 路径分隔符（在 UNIX 系统中是“:”）
     * @return
     */
    public static String getPathSeparator(){
        return getSysProperty("path.separator");
    }

    /**
     * 行分隔符（在 UNIX 系统中是“/n”）
     * @return
     */
    public static String getLineSeparator(){
        return getSysProperty("line.separator");
    }

    /**
     * 用户的账户名称
     * @return
     */
    public static String getUserName(){
        return getSysProperty("user.name");
    }

    /**
     * 用户的主目录
     * @return
     */
    public static String getUserHome(){
        return getSysProperty("user.home");
    }

    /**
     * 用户的当前工作目录
     * @return
     */
    public static String getUserDir(){
        return getSysProperty("user.dir");
    }

    /**
     * 是否是无头模式
     * @return
     */
    public static boolean getAwtHeadless(){
        return Boolean.getBoolean(getSysProperty("java.awt.headless"));
    }


    private static String getSysProperty(String key){
        return System.getProperty(key);
    }

    /**
     * 返回常用系统变量 可用于业务系统展示
     * @return
     */
    public static Map<String, String> getNormalSysProps(){
        Map<String, String> map = new HashMap<>();
        map.put("user.name", SysPropAdapter.getUserName());
        map.put("user.home", SysPropAdapter.getUserHome());
        map.put("user.dir", SysPropAdapter.getUserDir());
        map.put("java.home", SysPropAdapter.getJavaHome());
        map.put("java.version", SysPropAdapter.getJavaVersion());
        map.put("java.compiler", SysPropAdapter.getJavaCompiler());
        map.put("java.class.path", SysPropAdapter.getJavaClassPath());
        map.put("java.library.path", SysPropAdapter.getJavaLibraryPath());
        map.put("java.io.tmpdir", SysPropAdapter.getJavaIOTmpdir());
        return map;
    }
}
